#include <stdio.h>
#include <mysql/mysql.h>
#include <string.h>


// ./adduser <用户名> <手机号> <口令>
int main(int argc, char const *argv[])
{
    if(argc != 4) return -1;
    int ret = mysql_library_init(argc, (char **)argv, NULL); // mysql库的使用初始化
    if(ret != 0){
        perror("mysql lib init");
        return -1;
    }    

    printf("---mysql lib init ok--\n");

    MYSQL db;  // 定义mysql数据库对象
    if(mysql_init(&db) != NULL){
        printf("数据库对象初始化成功!\n");
        
        // 连接数据库:  1）本地域套接字  2）网络域套接字
        char *sock_path = "/var/run/mysqld/mysqld.sock";
        // host参数： 本地的 localhost  或 NULL
        if(mysql_real_connect(&db, NULL, "root", "root", "cloudfs", 3306, sock_path, 0) != NULL){
            printf("---MYSQ数据库连接成功--\n");

            // 扩展： 设置数据库客户端的字符集
            mysql_set_character_set(&db, "utf8");

            // 编写ddl sql语句
            char sql[128] = "insert into t_user(name,phone) values(?,?)"; // 预处理语句
            MYSQL_STMT *stmt = mysql_stmt_init(&db); // 创建或初始化预处理语句
            ret = mysql_stmt_prepare(stmt, sql, strlen(sql)); // 预处理
            ssize_t name_len = strlen(argv[1]);
            ssize_t phone_len = strlen(argv[2]);
            if(ret == 0){
                // 创建绑定参数数组并初始化
                MYSQL_BIND binds[2];
                binds[0].buffer_type = MYSQL_TYPE_STRING; // 实际填充sql语句加 ' 单引号的
                binds[0].buffer = (char *)argv[1]; // 实际的数据
                binds[0].length = &name_len ; // 数据长度的地址
                binds[0].is_null = NULL; // 有数据，不是空的

                binds[1].buffer_type = MYSQL_TYPE_STRING; // 实际填充sql语句加 ' 单引号的
                binds[1].buffer = (char *)argv[2]; // 实际的数据
                binds[1].length =  &phone_len ; // 长度为0/NULL时，表示自动计算
                binds[1].is_null = NULL; // 有数据，不是空的

                ret = mysql_stmt_bind_param(stmt, binds);
                if(ret == 0){
                    // 执行预处理语句
                    ret = mysql_stmt_execute(stmt);
                    if(ret == 0){
                        sprintf(sql, "insert into t_user_login(user_id,auth_string) values((select max(id) from t_user), hex(aes_encrypt('%s', '@520Disen!')) )", argv[3]);
                        if(mysql_real_query(&db, sql, strlen(sql)) == 0){
                            printf("添加用户成功\n");
                        }else{
                            printf("error: %s\n", mysql_error(&db));
                        }
                    }else{
                        printf("error: %s\n", mysql_error(&db));
                    }
                }else{
                    printf("error: %s\n", mysql_error(&db));
                }
            }else{
                printf("error: %s\n", mysql_error(&db));
            }      
            mysql_stmt_close(stmt); // 关闭预处理语句
            mysql_close(&db); // 关闭数据库连接
        }
    }
    mysql_library_end(); // mysql库的结束
    return 0;
}






